package com.openess.bigsearch.engine.index;

/**
 * 分词，也是键/值对，其中Key是必须实现Comparable接口的，因为所有装有Token的集合都不是拿Token对象本身进行比较，
 * 而是利用其中的Key进行比较
 * 
 * @author TuTu
 * 
 * @param <K>
 * @param <V>
 */
public class Token<K extends Comparable<K>, V> implements
		Comparable<Token<K, V>> {
	/**
	 * 键
	 */
	private K key;
	/**
	 * 值
	 */
	private V value;

	/**
	 * 默认构造器，也是空构造器
	 */
	public Token() {

	}

	/**
	 * 这个构造器便于依据key的查询用
	 * 
	 * @param key
	 */
	public Token(K key) {
		this(key, null);
	}

	/**
	 * 初始化K,V两个变量
	 * 
	 * @param key
	 * @param value
	 */
	public Token(K key, V value) {
		this.key = key;
		this.value = value;
	}

	@Override
	public String toString() {
		return "Token[key=" + key + ", value=" + value + "]";
	}

	@Override
	public int compareTo(Token<K, V> t) {
		if (this.key.compareTo(t.key) > 0) {
			return 1;
		} else if (this.key.compareTo(t.key) < 0) {
			return -1;
		} else {
			return 0;
		}
	}

	public final K getKey() {
		return key;
	}

	public final V getValue() {
		return value;
	}

	public final void setKey(K key) {
		this.key = key;
	}

	public final void setValue(V value) {
		this.value = value;
	}

	@Override
	public int hashCode() {
		return key.hashCode();

	}

}